home *** CD-ROM | disk | FTP | other *** search
Text File | 2001-03-19 | 21.5 KB | 1,149 lines |
- IFND JST_I_INCLUDED
- JST_I_INCLUDED = 1
-
- IFD BARFLY
- ;;; BOPT O+ OG+ ;enable optimizing
- BOPT ODd- ODe- ;disable mul optimizing
- BOPT w4- ;disable 64k warnings
- BOPT wo- ;disable optimizer warnings
- SUPER ;disable supervisor warnings
- ENDC
-
-
- include "gp_macros.i"
-
- IFD WHDLOADSLAVE
- include "osemu.i"
- include "own/whdload.i"
- include "own/whdmacros.i"
- ENDC
-
- IFND REDEFINED_REGISTERS
- REDEFINED_REGISTERS = 1
- Ax EQUR A5
- Ay EQUR A6
- ENDC
-
- ; wait for blitter operations to finish
- ; simple but effective
-
- WAIT_BLIT:MACRO
- .wait\@
- tst.b $BFE001
- BTST #6,dmaconr+$DFF000
- BNE.B .wait\@
- ENDM
-
- ; save local variables
-
- SET_VARZONE:MACRO
- IFNE NARG-2
- FAIL arguments "SET_VARZONE"
- ENDC
- STORE_REGS
- lea \1(pc),A0
- lea \2(pc),A1
- JSRABS SetLocalVarZone
- RESTORE_REGS
- ENDM
-
- ; wait using Vertical beam delay (thanks to Harry for the routine)
-
- BEAM_DELAY:MACRO
- IFNE NARG-1
- FAIL arguments "BEAM_DELAY"
- ENDC
-
- move.w d0,-(a7)
- move.w \1,D0
- beq.b .exit\@ ; don't wait
-
- .loop1\@
- move.w d0,-(a7)
- move.b $dff006,d0 ; VPOS
-
- .loop2\@
- cmp.b $dff006,d0
- beq.s .loop2\@
- move.w (a7)+,d0
- dbf d0,.loop1\@
-
- .exit\@
- move.w (a7)+,d0
- ENDM
-
- ; jump to relocatable JST routine
-
- JSRGEN:MACRO
- IFNE NARG-1
- FAIL arguments "JSRGEN"
- ENDC
-
- IFD WHDLOADSLAVE
- ;-------------------------------------
- IFC \1,'InGameExit'
- pea TDREASON_OK
- move.l (_resload,pc),-(a7)
- add.l #resload_Abort,(a7)
- rts
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'FlushCachesHard'
- move.l a0,-(A7)
- move.l _resload(PC),a0
- jsr resload_FlushCache(A0) ;preserves all registers
- move.l (A7)+,a0
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'PatchExceptions'
- ;ignored atm
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'StoreCopperPointer'
- ;ignored atm
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'TellCopperPointer'
- ;ignored atm
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'RNCDecrunch'
- ;ignored atm
- movem.l A2,-(A7)
- MOVE.L _resload(PC),A2
- JSR (resload_Decrunch,a2)
- movem.l (A7)+,A2
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'InGameIconify'
- ;ignored atm
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'FreezeAll'
- move.w #$7fff,$dff09a
- move.w #$7fff,$dff096
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'GoECS'
- move.w #$0c20,$dff106
- move.w #0,$dff1fc
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'BeamDelay'
- .bd_loop1\@
- move.w d0,-(a7)
- move.b $dff006,d0 ; VPOS
- .bd_loop2\@
- cmp.b $dff006,d0
- beq.s .bd_loop2\@
- move.w (a7)+,d0
- dbf d0,.bd_loop1\@
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'WaitMouse'
- .waitmousem_\@
- move.w $dff006,$dff180
- btst #6,$bfe001
- bne.s .waitmousem_\@
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'WaitReturn'
- .waitmousem_\@
- move.w $dff006,$dff180
- btst #6,$bfe001
- bne.s .waitmousem_\@
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'SetDisk'
- ;ignored atm
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'InitTrackDisk'
-
- IFND WHDM_INITTRACKDISK_CALLED
- WHDM_INITTRACKDISK_CALLED EQU 1
- bra.s .whdm_itd1\@
- .whdm_id_table\@
- WHDM_INITTRACKDISK_TABLE EQU .whdm_id_table\@
- DC.L 0,0,0,0,0,0,0,0,0,0,0,0
- .whdm_itd1\@
- ENDC
-
- lea.l WHDM_INITTRACKDISK_TABLE(PC),A1
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'TrackLoad'
- movem.l d0-d1/a0-a2,-(A7)
- cmp.w #2,$1c(A1)
- beq.s .whdm_trackload1\@
- illegal
- .whdm_trackload1\@
- move.l $24(A1),d0
- move.l $2c(A1),d1
- move.l $28(A1),a1
- lea.l HDP_FnameDiskNo(PC),a0
- move.b #$31,(A0) ;only disk 0 atm
- lea.l HDP_FnameStart(PC),a0
- MOVE.L _resload(PC),A2
- JSR (resload_LoadFileOffset,a2)
- movem.l (A7)+,d0-d1/a0-a2
- move.b #0,$1f(A1) ;no error
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'HexReplaceLong'
- STORE_REGS A0-A1/D0-D1
- .srch\@
- cmp.l (A0),D0
- beq.b .found\@
- .next\@
- addq.l #2,A0
- cmp.l A1,A0
- bcc.b .exit\@
- bra.b .srch\@
- .found\@
- move.l D1,(A0)+
- bra .next\@
- .exit\@
- RESTORE_REGS A0-A1/D0-D1
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'HexSearch'
- movem.l D1/D3/A1-A2,-(A7)
- .addrloop\@:
- moveq.l #0,D3
- .strloop\@:
- move.b (A0,D3.L),D1 ; gets byte
- cmp.b (A2,D3.L),D1 ; compares it to the user string
- bne.b .notok\@ ; nope
- addq.l #1,D3
- cmp.l D0,D3
- bcs.b .strloop\@
-
- ; pattern was entirely found!
-
- bra.b .exit\@
- .notok\@:
- addq.l #1,A0 ; next byte please
- cmp.l A0,A1
- bcc.b .addrloop\@ ; end?
- sub.l A0,A0
- .exit\@:
- movem.l (A7)+,D1/D3/A1-A2
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'ReadRobSectors'
- movem.l d1-d2/a0-a2,-(A7)
- tst.w d3
- beq.s .whdm_rrs_load1\@
- cmp.w #$8000,d3
- beq.s .whdm_rrs_load1\@
- illegal ;doesnt save yet
- .whdm_rrs_load1\@
- swap D1
- clr.w D1
- swap D1
- swap D2
- clr.w D2
- swap D2
- tst.w D2
- beq.b .exit\@ ; length=0: out
-
- move.l a0,a1 ;address
- lea.l HDP_FnameDiskNo(PC),a0
- add.b #$31,d0 ;only up to 9 disks
- move.b d0,(A0)
- lea.l HDP_FnameStart(PC),a0
-
- move.l D2,D0 ;len to read
- ext.l d0
- lsl.l #7,d0
- lsl.l #2,d0
- ext.l d1
- lsl.l #7,d1 ;diskoffset
- lsl.l #2,d1
- MOVE.L _resload(PC),A2
- JSR (resload_LoadFileOffset,a2)
- .exit\@
- movem.l (A7)+,d1-d2/a0-a2
- not.l d0 ;KNOWN BUG: RETURNCODE UNSET!
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'ReadDiskPart'
- movem.l d1/a0-a2,-(A7)
- move.l a0,a1 ;address
- lea.l HDP_FnameDiskNo(PC),a0
- add.b #$31,d0 ;only up to 9 disks
- move.b d0,(A0)
- lea.l HDP_FnameStart(PC),a0
- move.l D1,D0 ;len to read
- move.l d2,d1
- MOVE.L _resload(PC),A2
- JSR (resload_LoadFileOffset,a2)
- movem.l (A7)+,d1/a0-a2
- not.l d0 ;KNOWN BUG: RETURNCODE UNSET!
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'ReadFile'
- ;ignores command (d0)
- movem.l d1/a0-a2,-(A7)
- MOVE.L _resload(PC),A2
- JSR (resload_GetFileSize,a2)
- movem.l (A7),d1/a0/a1
- cmp.l d0,d1
- bls.s .whdm_loadfile\@
- move.l d0,d1
- move.l d1,(A7)
- .whdm_loadfile\@
- MOVE.L D1,D0 ;len to read
- MOVEQ.L #0,D1 ;start with begin of file
- ;name and address match jst-function
- JSR (resload_LoadFileOffset,a2)
- movem.l (A7)+,d1/a0-a2
- not.l d0
- ;result: D0=0 if success, d1-len if success
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'StrlenAsm'
- movem.l A0,-(A7)
- move.l D0,A0
- clr.l D0
- .loop\@:
- tst.b (A0,D0.L)
- beq.b .exit\@
- addq.l #1,D0
- bra.b .loop\@
- .exit\@:
- movem.l (A7)+,A0
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'ReadUserFileHD'
- ;ignores command (d0)
- movem.l d1/a0-a2,-(A7)
- MOVE.L _resload(PC),A2
- JSR (resload_GetFileSize,a2)
- movem.l (A7),d1/a0/a1
- cmp.l d0,d1
- bls.s .whdm_loadfile\@
- move.l d0,d1
- move.l d1,(A7)
- .whdm_loadfile\@
- MOVE.L D1,D0 ;len to read
- MOVEQ.L #0,D1 ;start with begin of file
- ;name and address match jst-function
- JSR (resload_LoadFileOffset,a2)
- movem.l (A7)+,d1/a0-a2
- not.l d0
- ;result: D0=0 if success, d1-len if success
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'WriteUserFileHD'
- ;ignores command (d0)
- movem.l d1/a0-a2,-(A7)
- MOVE.L _resload(PC),A2
- MOVE.L D1,D0 ;len to save
- MOVEQ.L #0,D1 ;start with begin of file
- ;name and address match jst-function
- JSR (resload_SaveFileOffset,a2)
- movem.l (A7)+,d1/a0-a2
- not.l d0
- ;result: D0=0 if success, d1-len if success
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'StrcmpAsm'
- movem.l d1/a0-a2,-(A7)
- move.l d0,a0
- move.l d1,a1
- .contstrcmpasm\@
- move.b (A0)+,d0
- beq.s .termstrcmpasm\@
- move.b (A1)+,d1
- beq.s .failstrcmpasm\@
- bsr.s .letterstrcmpasm\@
- exg d0,d1
- bsr.s .letterstrcmpasm\@
- cmp.b d0,d1
- bne.s .failstrcmpasm\@
- bra.s .contstrcmpasm\@
-
- .termstrcmpasm\@
- tst.b (A1)+
- bne.s .failstrcmpasm\@
- moveq.l #0,d0
- bra.s .endstrcmpasm\@
-
- .letterstrcmpasm\@
- cmp.b #$60,d0
- bls.s .letter1strcmpasm\@
- cmp.b #$7a,d0
- bhi.s .letter1strcmpasm\@
- sub.b #$20,d0
- .letter1strcmpasm\@
- rts
-
- .failstrcmpasm\@
- moveq.l #-1,d0
- .endstrcmpasm\@
- movem.l (A7)+,d1/a0-a2
- MEXIT
- ENDC
- ;-------------------------------------
- FAIL 'JSRGEN-WHDLOAD'
- ELSE
-
- PEA .END_JSRGEN\@(PC)
-
- MOVE.L RelTable(PC),-(A7)
- ADD.L #RelOff_\1,(A7)
-
- MOVE.L A0,-(A7)
- MOVE.L 4(A7),A0
- MOVE.L (A0),4(A7)
-
- MOVE.L (A7)+,A0
- RTS
-
- .END_JSRGEN\@
- ENDC
- ENDM
-
- ; jump to relocatable JST routine, with interrupts disabled
-
- JSRGEN_FREEZE:MACRO
- IFNE NARG-1
- FAIL arguments "JSRGEN_FREEZE"
- ENDC
- move.w SR,-(A7)
- move.w #$2700,SR ; freeze, bastard
- JSRGEN \1
- move.w (A7)+,SR
- ENDM
-
- ; jump to absolute JST routines (only when OS is active!!)
-
- JSRABS:MACRO
- IFNE NARG-1
- FAIL arguments "JSRABS"
- ENDC
-
- IFD WHDLOADSLAVE
- ;-------------------------------------
- IFC \1,'Display'
- ;ignore display
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'NewLine'
- ;ignore newline
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'UseHarryOSEmu'
- OSEMU_BASE=$400
- lea .osemuname\@(pc),a0
- lea OSEMU_BASE,a1
- move.l (_resload,pc),a2
- jsr (resload_LoadFileDecrunch,a2) ;this allows to
- ;compress the osemu
- move.l (_resload,pc),a0 ;the resload base
- lea (_whdinit_base,pc),a1 ;the slave structure
-
- ; Jeff: problems with expansion mem ATM
- ; move.l (ws_ExpMem,A1),(OSEMU_BASE+OSM_EXPMEM)
- ; beq.b .nofast\@
- ; move.l #FASTMEMSIZE,(OSEMU_BASE+OSM_EXPSIZE)
- ; move.l (ws_ExpMem,A1),A2
- ; moveq.l #0,D0
- ;.clrfast\@: ; clear fastmem if present
- ; clr.l (A2)+
- ; addq.l #4,D0
- ; cmp.l #FASTMEMSIZE,D0
- ; bcs.b .clrfast\@
- ;.nofast\@
-
- jsr OSEMU_BASE
-
- sub.l A2,A2
- sub.l A3,A3
- sub.l A4,A4
- sub.l A5,A5
- moveq.l #0,D0
- moveq.l #0,D1
- moveq.l #0,D2
- moveq.l #0,D3
- moveq.l #0,D4
- moveq.l #0,D5
- moveq.l #0,D6
- moveq.l #0,D7
- bra.b .out\@
- .osemuname\@:
- dc.b "OSEmu.400",0
- even
- .out\@
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'LoadSmallFiles'
- ;ignore LoadSmallFiles (whdload uses preload)
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'LoadFiles'
- ;ignore LoadFiles (whdload uses preload)
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'Degrade'
- IFD WHDM_DEGRADE_CALLED
- FAIL 'Degrade called twice'
- ENDC
- WHDM_DEGRADE_CALLED SET 1
- ;map Degrade on SetCACR
- movem.l d0-d1/a0-a2,-(A7)
- move.l _resload(PC),a2
- and.l #CACRF_EnableI|CACRF_EnableD,d0 ;mask bits allowed in whdload
- and.l #CACRF_EnableI|CACRF_EnableD,d1 ;mask bits allowed in whdload
- jsr (resload_SetCACR,a2)
- movem.l (A7)+,d0-d1/a0-a2
-
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'SupervisorMode'
- IFD WHDM_SUPERVISORMODE_CALLED
- FAIL 'SupervisorMode called twice'
- ENDC
- WHDM_SUPERVISORMODE_CALLED SET 1
- ;ignore SupervisorMode once
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'SaveOSData'
- IFD WHDM_SAVEOSDATA_CALLED
- FAIL 'SaveOSData called twice'
- ENDC
- WHDM_SAVEOSDATA_CALLED SET 1
- ;ignore SaveOSData once
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'SetLocalVarZone'
- ;ignored atm
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'AllocExtMem'
- IFD WHDM_ALLOCEXTMEM_CALLED
- FAIL 'AllocExtMem called twice'
- ENDC
- WHDM_ALLOCEXTMEM_CALLED SET 1
- cmp.l #FASTMEMSIZE,D0
- beq.s .whdm_allocextmem1\@
- illegal
- .whdm_allocextmem1\@
- move.l _whd_fmemaddr(PC),d0
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'Alloc24BitMem'
- IFD WHDM_ALLOCEXTMEM_CALLED
- FAIL 'Alloc24BitMem called twice'
- ENDC
- WHDM_ALLOCEXTMEM_CALLED SET 1
- cmp.l #FAKEFMEMSIZE,D0
- beq.s .whdm_alloc24bitmem1\@
- illegal
- .whdm_alloc24bitmem1\@
- move.l #CHIPMEMSIZE,d0
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'CloseAll'
- pea TDREASON_DEBUG
- move.l (_resload,pc),-(a7)
- add.l #resload_Abort,(a7)
- rts
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'TestFile'
- movem.l d1/a0-a2,-(A7)
- move.l _resload(PC),a2
- move.l d0,a0
- jsr (resload_GetFileSize,a2)
- movem.l (A7)+,d1/a0-a2
- tst.l d0
- bne.s .whdm_testfile1\@
- moveq.l #-1,d0
- bra.s .whdm_testfile2\@
-
- .whdm_testfile1\@
- moveq.l #0,d0
- .whdm_testfile2\@
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'LoadDisks'
- ;ignore loaddisks
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'WaitMouse'
- .waitmousem_\@
- move.w $dff006,$dff180
- btst #6,$bfe001
- bne.s .waitmousem_\@
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'WaitReturn'
- .waitmousem_\@
- move.w $dff006,$dff180
- btst #6,$bfe001
- bne.s .waitmousem_\@
- MEXIT
- ENDC
- ;-------------------------------------
- ;unsupported functions cause errors
- FAIL 'JSRABS-WHDLOAD'
- ;end whdload-part
- ELSE
-
-
- PEA .END_JSRABS\@(PC)
-
- MOVE.L AbsTable(PC),-(A7)
- ADD.L #AbsOff_\1,(A7)
-
- MOVE.L A0,-(A7)
- MOVE.L 4(A7),A0
- MOVE.L (A0),4(A7)
-
- MOVE.L (A7)+,A0
- RTS
-
- .END_JSRABS\@
- ENDC
- ENDM
-
- JMPABS:MACRO
- IFNE NARG-1
- FAIL arguments "JMPABS"
- ENDC
-
- IFD WHDLOADSLAVE
- ;-------------------------------------
- IFC \1,'Display'
- rts ;ignore display
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'NewLine'
- rts ;ignore newline
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'LoadFiles'
- rts ;ignore LoadFiles (whdload uses preload)
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'Degrade'
- IFD WHDM_DEGRADE_CALLED
- FAIL 'Degrade called twice'
- ENDC
- WHDM_DEGRADE_CALLED SET 1
- ;map Degrade on SetCACR
- movem.l d0-d1/a0-a2,-(A7)
- move.l _resload(PC),a2
- and.l #CACRF_EnableI|CACRF_EnableD,d0 ;mask bits allowed in whdload
- and.l #CACRF_EnableI|CACRF_EnableD,d1 ;mask bits allowed in whdload
- jsr (resload_SetCACR,a2)
- movem.l (A7)+,d0-d1/a0-a2
- rts
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'SupervisorMode'
- IFD WHDM_SUPERVISORMODE_CALLED
- FAIL 'SupervisorMode called twice'
- ENDC
- WHDM_SUPERVISORMODE_CALLED SET 1
- rts ;ignore SupervisorMode once
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'SaveOSData'
- IFD WHDM_SAVEOSDATA_CALLED
- FAIL 'SaveOSData called twice'
- ENDC
- WHDM_SAVEOSDATA_CALLED SET 1
- rts ;ignore SaveOSData once
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'SetLocalVarZone'
- rts ;ignored atm
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'AllocExtMem'
- IFD WHDM_ALLOCEXTMEM_CALLED
- FAIL 'AllocExtMem called twice'
- ENDC
- WHDM_ALLOCEXTMEM_CALLED SET 1
- cmp.l #FASTMEMSIZE,D0
- beq.s .whdm_allocextmem1\@
- illegal
- .whdm_allocextmem1\@
- move.l _whd_fmemaddr(PC),d0
- rts
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'CloseAll'
- pea TDREASON_DEBUG
- move.l (_resload,pc),-(a7)
- add.l #resload_Abort,(a7)
- rts
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'TestFile'
- movem.l d1/a0-a2,-(A7)
- move.l _resload(PC),a2
- move.l d0,a0
- jsr (resload_GetFileSize,a2)
- movem.l (A7)+,d1/a0-a2
- tst.l d0
- bne.s .whdm_testfile1\@
- moveq.l #-1,d0
- bra.s .whdm_testfile2\@
-
- .whdm_testfile1\@
- moveq.l #0,d0
- .whdm_testfile2\@
- rts
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'LoadDisks'
- rts ;ignore loaddisks
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'WaitMouse'
- .waitmousem_\@
- move.w $dff006,$dff180
- btst #6,$bfe001
- bne.s .waitmousem_\@
- rts
- MEXIT
- ENDC
- ;-------------------------------------
- IFC \1,'WaitReturn'
- .waitmousem_\@
- move.w $dff006,$dff180
- btst #6,$bfe001
- bne.s .waitmousem_\@
- rts
- MEXIT
- ENDC
- ;-------------------------------------
- FAIL 'JMPABS-WHDLOAD'
- ELSE
-
- MOVE.L AbsTable(PC),-(A7)
- ADD.L #AbsOff_\1,(A7)
-
- MOVE.L A0,-(A7)
- MOVE.L 4(A7),A0
- MOVE.L (A0),4(A7)
-
- MOVE.L (A7)+,A0
- RTS
-
- ENDC
- ENDM
-
- GO_SUPERVISOR:MACRO
- JSRABS SupervisorMode
- ENDM
-
- GO_USER:MACRO
- JSRABS UserMode
- ENDM
-
- SAVE_OSDATA:MACRO
- IFLT NARG-1
- FAIL arguments "SAVE_OSDATA"
- ENDC
-
- IFGE NARG-2
- MOVEM.L D0/A0,-(A7)
-
- MOVEQ #0,D0
- MOVE.B \2,D0
-
- IFEQ NARG-3
- LEA \3(PC),A0
- ELSE
- SUB.L A0,A0
- ENDIF
-
- JSRGEN SetQuitKey
-
- MOVEM.L (A7)+,D0/A0
- ENDIF
-
- IFD WHDLOADSLAVE
- _whd_chipused SET _whd_chipused+\1
- _saveosdata_tempvar\@ SET CHIPMEMSIZE+FAKEFMEMSIZE
- IFLT _saveosdata_tempvar\@-_whd_chipused
- FAIL 'Too few memory set in slave'
- ENDC
- ELSE
-
- ;; move.l D0,-(sp)
- move.l #\1,D0
- JSRABS SaveOSData
- ;; move.l (sp)+,D0 ; stack changes anyway!
- ; Registers are zeroed too ;-) [Ralf]
- ENDC ;end whdload-jst
- ENDM
-
- ; obsolete now, but can be useful to load a data register
- ; with a relative address
-
- GETUSRADDR:MACRO
- IFNE NARG-1
- FAIL arguments "PATCHUSRADDR"
- ENDC
- move.l Ax,-(sp)
- lea \1(pc),Ax
- move.l Ax,D0
- move.l (sp)+,Ax
- ENDM
-
- GETGENADDR:MACRO
- IFNE NARG-1
- FAIL arguments "GETGENADDR"
- ENDC
- move.l Ax,-(sp)
- move.l RelTable(pc),Ax
- add.l #RelOff_\1,Ax
- move.l (Ax),D0
- move.l (sp)+,Ax
- ENDM
-
- ; puts a RTS and notifies
-
- PATCH_RTS:MACRO
- IFNE NARG-1
- FAIL arguments "PATCH_RTS"
- ENDC
-
- REGISTER_PATCH \1,#8 ; 6 bytes ahead to allow to find the pattern
- move.w #$4E75,\1
- ENDM
-
- ; puts a RTE and notifies
-
- PATCH_RTE:MACRO
- IFNE NARG-1
- FAIL arguments "PATCH_RTE"
- ENDC
-
- REGISTER_PATCH \1,#8 ; 8 bytes ahead to allow to find the pattern
- move.w #$4E73,\1
- ENDM
-
- ; puts a NOP and notifies
-
- PATCH_NOP:MACRO
- IFNE NARG-1
- FAIL arguments "PATCH_NOP"
- ENDC
-
- REGISTER_PATCH \1,#8 ; 8 bytes ahead to allow to find the pattern
- move.w #$4E71,\1
- ENDM
-
- ; puts 2 NOPs and notifies
-
- PATCH_NOPNOP:MACRO
- IFNE NARG-1
- FAIL arguments "PATCH_NOPNOP"
- ENDC
-
- REGISTER_PATCH \1,#8 ; 8 bytes ahead to allow to find the pattern
- move.l #$4E714E71,\1
- ENDM
-
- ; allows to notify JST about a patch
- ; if PATCH_LOGGED is defined
-
- REGISTER_PATCH:MACRO
- IFNE NARG-2
- FAIL arguments "REGISTER_PATCH"
- ENDC
-
- IFD PATCH_LOGGED
- movem.l D0-A0,-(A7)
- lea \1,A0
- move.l \2,D0
- JSRGEN LogPatch
- movem.l (A7)+,D0-A0
- ENDC
- ENDM
-
- ; obsolete now
-
- PATCHABSJMP:MACRO
- PATCHUSRJMP \1,\2
- ENDM
-
- ; obsolete now
-
- PATCHABSJSR:MACRO
- PATCHUSRJSR \1,\2
- ENDM
-
-
- PATCHUSRJMP:MACRO
- IFNE NARG-2
- FAIL arguments "PATCHUSRJMP"
- ENDC
- PATCHUSRXXX \1,\2,$4EF9
- ENDM
-
- PATCHUSRJSR:MACRO
- IFNE NARG-2
- FAIL arguments "PATCHUSRJSR"
- ENDC
- PATCHUSRXXX \1,\2,$4EB9
- ENDM
-
- PATCHGENJMP:MACRO
- IFNE NARG-2
- FAIL arguments "PATCHGENJMP"
- ENDC
- PATCHGENXXX \1,\2,$4EF9
- ENDM
-
- PATCHGENJSR:MACRO
- IFNE NARG-2
- FAIL arguments "PATCHGENJSR"
- ENDC
- PATCHGENXXX \1,\2,$4EB9
- ENDM
-
- PATCHUSRXXX:MACRO
- REGISTER_PATCH \1,#6
-
- movem.l Ax/Ay,-(sp)
- lea \2(pc),Ax
- lea \1,Ay
- move.w #\3,(Ay)+
- move.l Ax,(Ay)
- movem.l (sp)+,Ax/Ay
- ENDM
-
- PATCHGENXXX:MACRO
- REGISTER_PATCH \1,#6
-
- movem.l Ax/Ay,-(sp)
-
- move.l RelTable(pc),Ax
- add.l #RelOff_\2,Ax
- move.l (Ax),Ax
- lea \1,Ay
- move.w #\3,(Ay)+
- move.l Ax,(Ay)
-
- movem.l (sp)+,Ax/Ay
- ENDM
-
- TESTFILE:MACRO
- IFNE NARG-1
- FAIL arguments "TESTFILE"
- ENDC
- move.l Ax,-(sp)
- lea \1(pc),Ax
- move.l Ax,D0
- JSRABS TestFile
- move.l (sp)+,Ax
- ENDM
-
- HD_PARAMS:MACRO
- IFD WHDLOADSLAVE
- IFLT NARG-3
- FAIL arguments "HD_PARAMS"
- ENDC
-
- _whdinit_base
- SLAVE_HEADER ;ws_Security + ws_ID
- dc.w 10 ;ws_Version
- IFND WHDLOADSLAVEFLAGS
- dc.w WHDLF_NoError|WHDLF_EmulTrap ;ws_flags
- ELSE
- dc.w WHDLF_NoError|WHDLF_EmulTrap|WHDLOADSLAVEFLAGS
- ENDC
- dc.l CHIPMEMSIZE+FAKEFMEMSIZE ;ws_BaseMemSize
- dc.l 0 ;ws_ExecInstall
- dc.w HDP_End-_whdinit_base ;ws_GameLoader
- dc.w 0 ;ws_CurrentDir
- dc.w 0 ;ws_DontCache
- dc.b $00 ;ws_keydebug = none
- _whd_keyexit dc.b $5D ;ws_keyexit = *
- _whd_fmemaddr DC.L FASTMEMSIZE ;fastmem
- dc.w _whdi_name-_whdinit_base
- dc.w _whdi_copyright-_whdinit_base
- dc.w _whdi_installer-_whdinit_base
-
- IFGE NARG-6
- _whdi_name dc.b '\4',0
- _whdi_copyright dc.b '\5',0
- _whdi_installer dc.b '\6',0
- ELSE
- _whdi_name dc.b 'UNKNOWN',0
- _whdi_copyright dc.b 'UNKNOWN',0
- _whdi_installer dc.b 'UNKNOWN',0
- ENDC
- EVEN
- HDP_FnameStart:
- IFD MAXON_ASM
- DC.B "\1"
- HDP_FnameDiskNo dc.b 0,0
- ELSE
- dc.b \1
- HDP_FnameDiskNo dc.b 0,0 ; used for diskfiles
- ENDIF
- cnop 0,4
- HDP_End:
- ;function to init slave
- ;atm only for loading regs in whdload as overgiven by jst
- lea _resload(pc),a1
- move.l a0,(a1) ;save for later use
- bra.s _whdinit_slave1
-
- _resload dc.l 0
-
- _tags dc.l WHDLTAG_CUSTOM5_GET ;trainer
- _whdi_custom5 dc.l 0
- dc.l WHDLTAG_CUSTOM4_GET ;joypad
- _whdi_custom4 dc.l 0
- dc.l WHDLTAG_BUTTONWAIT_GET ;buttonwait
- _whdi_buttonwait dc.l 0
- dc.l 0
-
- _whdinit_slave1
- ;get tags
- lea (_tags,pc),a0
- move.l _resload(PC),a2
- jsr (resload_Control,a2)
-
-
- move.l _whdi_custom5(PC),d0
- moveq.l #0,d1
- move.l _whdi_custom4(PC),d2
- moveq.l #0,d3
- move.l _whdi_buttonwait(PC),d4
- moveq.l #0,d5
-
- _whd_chipused set 0 ;needed for verification of memoryroutines
- _whd_fastused set 0
- _whd_fakefused set 0
-
- ELSE
-
- IFLT NARG-3
- FAIL arguments "HD_PARAMS"
- ENDC
- HDP_Start:
- dc.l $70004E75 ; 00 if the user tries to start the loader
- dc.b "JOTD" ; 04 magic number
- dc.l CURRENT_VERSION_ID ; 09 version of JST identifier
- AbsTable:
- dc.l 0 ; 0C pointer on general absolute table
- RelTable:
- dc.l 0 ; 10 pointer on general relocate table
- dc.l \2 ; 14 diskfile size
- dc.l \3 ; 18 number of disks
- dc.l HDP_End-HDP_Start ; 1C entrypoint offset
- dc.l HDP_FnameStart-HDP_Start ; 20 offset of fname
- _SysBase:
- dc.l 0 ; 24 sysbase
- _DosBase:
- dc.l 0 ; 28 dosbase
-
- HDP_FnameStart:
- IFD MAXON_ASM
- DC.B "\1",0
- ELSE
- dc.b \1,0 ; used for diskfiles
- ENDIF
- cnop 0,4
- HDP_End:
- ; start of the loader
- ; initialize patch zone if PATCH_LOGGED set
-
- IFD PATCH_LOGGED
- JSRABS InitLogPatch
- ENDC
- ENDC ;ENDC jst/whdload
- ENDM
-
- ; if hardware not already defined, do it
-
- IFND dmacon
-
- include "hardware/custom.i"
-
- ENDC
-
- ; copied caches flag from execbase.i to avoid including
- ; system libs only for those ones
-
- IFND CACRF_EnableI
-
- CACRF_EnableI EQU (1<<0) ; Enable instruction cache
- CACRF_FreezeI EQU (1<<1) ; Freeze instruction cache
- CACRF_ClearI EQU (1<<3) ; Clear instruction cache
- CACRF_IBE EQU (1<<4) ; Instruction burst enable
- CACRF_EnableD EQU (1<<8) ; 68030 Enable data cache
- CACRF_FreezeD EQU (1<<9) ; 68030 Freeze data cache
- CACRF_ClearD EQU (1<<11) ; 68030 Clear data cache
- CACRF_DBE EQU (1<<12) ; 68030 Data burst enable
- CACRF_WriteAllocate EQU (1<<13) ; 68030 Write-Allocate mode
- CACRF_EnableE EQU (1<<30) ; Master enable for external caches
- ; External caches should track the
- ; state of the internal caches
- ; such that they do not cache anything
- ; that the internal cache turned off; for.
- CACRF_CopyBack EQU (1<<31) ; Master enable for copyback caches
- ENDC
- ENDC
-